/*
* Copyright (C) 1997-2001 Id Software, Inc.
* 
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later
* version.
* 
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE.
* 
* See the GNU General Public License for more details.
* 
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
* Place - Suite 330, Boston, MA 02111-1307, USA.
*  
*/

// Created on 13.11.2003 by RST.
// $Id: M_Flyer.java,v 1.4 2005/11/20 22:18:33 salomo Exp $
using System;
using Defines = Suake2.UI.Defines;
using Suake2.UI.game;
using EntDieAdapter = Suake2.UI.game.EntDieAdapter;
using EntInteractAdapter = Suake2.UI.game.EntInteractAdapter;
using EntPainAdapter = Suake2.UI.game.EntPainAdapter;
using EntThinkAdapter = Suake2.UI.game.EntThinkAdapter;
using GameAI = Suake2.UI.game.GameAI;
using GameBase = Suake2.UI.game.GameBase;
using GameUtil = Suake2.UI.game.GameUtil;
using Monster = Suake2.UI.game.Monster;
using edict_t = Suake2.UI.game.edict_t;
using mframe_t = Suake2.UI.game.mframe_t;
using mmove_t = Suake2.UI.game.mmove_t;
using Lib = Suake2.UI.util.Lib;
using Math3D = Suake2.UI.util.Math3D;
namespace Suake2.UI.game.monsters
{
	
	public class M_Flyer
	{
		public M_Flyer()
		{
			InitBlock();
		}
		public class AnonymousClassEntInteractAdapter:EntInteractAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_sight";
				}
				
			}
			public override bool interact(edict_t self, edict_t other)
			{
				GameBase.gi.sound(self, Defines.CHAN_VOICE, jake2.game.monsters.M_Flyer.sound_sight, 1, Defines.ATTN_NORM, 0);
				return true;
			}
		}
		public class AnonymousClassEntThinkAdapter:EntThinkAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_idle";
				}
				
			}
			public override bool think(edict_t self)
			{
				GameBase.gi.sound(self, Defines.CHAN_VOICE, jake2.game.monsters.M_Flyer.sound_idle, 1, Defines.ATTN_IDLE, 0);
				return true;
			}
		}
		public class AnonymousClassEntThinkAdapter1:EntThinkAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_pop_blades";
				}
				
			}
			public override bool think(edict_t self)
			{
				GameBase.gi.sound(self, Defines.CHAN_VOICE, jake2.game.monsters.M_Flyer.sound_sproing, 1, Defines.ATTN_NORM, 0);
				return true;
			}
		}
		public class AnonymousClassEntThinkAdapter2:EntThinkAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_run";
				}
				
			}
			public override bool think(edict_t self)
			{
				if ((self.monsterinfo.aiflags & Defines.AI_STAND_GROUND) != 0)
					self.monsterinfo.currentmove = Suake2.UI.game.monsters.M_Flyer.flyer_move_stand;
				else
					self.monsterinfo.currentmove = Suake2.UI.game.monsters.M_Flyer.flyer_move_run;
				return true;
			}
		}
		public class AnonymousClassEntThinkAdapter3:EntThinkAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_walk";
				}
				
			}
			public override bool think(edict_t self)
			{
				self.monsterinfo.currentmove = Suake2.UI.game.monsters.M_Flyer.flyer_move_walk;
				return true;
			}
		}
		public class AnonymousClassEntThinkAdapter4:EntThinkAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_stand";
				}
				
			}
			public override bool think(edict_t self)
			{
				self.monsterinfo.currentmove = Suake2.UI.game.monsters.M_Flyer.flyer_move_stand;
				return true;
			}
		}
		public class AnonymousClassEntThinkAdapter5:EntThinkAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_nextmove";
				}
				
			}
			public override bool think(edict_t self)
			{
				if (jake2.game.monsters.M_Flyer.nextmove == jake2.game.monsters.M_Flyer.ACTION_attack1)
					self.monsterinfo.currentmove = Suake2.UI.game.monsters.M_Flyer.flyer_move_start_melee;
				else if (jake2.game.monsters.M_Flyer.nextmove == jake2.game.monsters.M_Flyer.ACTION_attack2)
					self.monsterinfo.currentmove = Suake2.UI.game.monsters.M_Flyer.flyer_move_attack2;
				else if (jake2.game.monsters.M_Flyer.nextmove == jake2.game.monsters.M_Flyer.ACTION_run)
					self.monsterinfo.currentmove = Suake2.UI.game.monsters.M_Flyer.flyer_move_run;
				return true;
			}
		}
		public class AnonymousClassEntThinkAdapter6:EntThinkAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_stop";
				}
				
			}
			public override bool think(edict_t self)
			{
				self.monsterinfo.currentmove = Suake2.UI.game.monsters.M_Flyer.flyer_move_stop;
				return true;
			}
		}
		public class AnonymousClassEntThinkAdapter7:EntThinkAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_start";
				}
				
			}
			public override bool think(edict_t self)
			{
				self.monsterinfo.currentmove = Suake2.UI.game.monsters.M_Flyer.flyer_move_start;
				return true;
			}
		}
		public class AnonymousClassEntThinkAdapter8:EntThinkAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_fireleft";
				}
				
			}
			public override bool think(edict_t self)
			{
				jake2.game.monsters.M_Flyer.flyer_fire(self, Defines.MZ2_FLYER_BLASTER_1);
				return true;
			}
		}
		public class AnonymousClassEntThinkAdapter9:EntThinkAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_fireright";
				}
				
			}
			public override bool think(edict_t self)
			{
				jake2.game.monsters.M_Flyer.flyer_fire(self, Defines.MZ2_FLYER_BLASTER_2);
				return true;
			}
		}
		public class AnonymousClassEntThinkAdapter10:EntThinkAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_slash_left";
				}
				
			}
			public override bool think(edict_t self)
			{
				float[] aim = new float[]{0, 0, 0};
				
				Math3D.VectorSet(aim, Defines.MELEE_DISTANCE, self.mins[0], 0);
				GameWeapon.fire_hit(self, aim, 5, 0);
				GameBase.gi.sound(self, Defines.CHAN_WEAPON, jake2.game.monsters.M_Flyer.sound_slash, 1, Defines.ATTN_NORM, 0);
				return true;
			}
		}
		public class AnonymousClassEntThinkAdapter11:EntThinkAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_slash_right";
				}
				
			}
			public override bool think(edict_t self)
			{
				float[] aim = new float[]{0, 0, 0};
				
				Math3D.VectorSet(aim, Defines.MELEE_DISTANCE, self.maxs[0], 0);
				GameWeapon.fire_hit(self, aim, 5, 0);
				GameBase.gi.sound(self, Defines.CHAN_WEAPON, jake2.game.monsters.M_Flyer.sound_slash, 1, Defines.ATTN_NORM, 0);
				return true;
			}
		}
		public class AnonymousClassEntThinkAdapter12:EntThinkAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_loop_melee";
				}
				
			}
			public override bool think(edict_t self)
			{
				/*
				* if (random() <= 0.5) self.monsterinfo.currentmove =
				* flyer_move_attack1; else
				*/
				self.monsterinfo.currentmove = Suake2.UI.game.monsters.M_Flyer.flyer_move_loop_melee;
				return true;
			}
		}
		public class AnonymousClassEntThinkAdapter13:EntThinkAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_check_melee";
				}
				
			}
			public override bool think(edict_t self)
			{
				if (GameUtil.range(self, self.enemy) == Defines.RANGE_MELEE)
					if (Lib.random() <= 0.8)
						self.monsterinfo.currentmove = Suake2.UI.game.monsters.M_Flyer.flyer_move_loop_melee;
					else
						self.monsterinfo.currentmove = Suake2.UI.game.monsters.M_Flyer.flyer_move_end_melee;
				else
					self.monsterinfo.currentmove = Suake2.UI.game.monsters.M_Flyer.flyer_move_end_melee;
				return true;
			}
		}
		public class AnonymousClassEntThinkAdapter14:EntThinkAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_attack";
				}
				
			}
			public override bool think(edict_t self)
			{
				/*
				* if (random() <= 0.5) self.monsterinfo.currentmove =
				* flyer_move_attack1; else
				*/
				self.monsterinfo.currentmove = Suake2.UI.game.monsters.M_Flyer.flyer_move_attack2;
				
				return true;
			}
		}
		public class AnonymousClassEntThinkAdapter15:EntThinkAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_setstart";
				}
				
			}
			public override bool think(edict_t self)
			{
				jake2.game.monsters.M_Flyer.nextmove = Suake2.UI.game.monsters.M_Flyer.ACTION_run;
				self.monsterinfo.currentmove = Suake2.UI.game.monsters.M_Flyer.flyer_move_start;
				return true;
			}
		}
		public class AnonymousClassEntThinkAdapter16:EntThinkAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_melee";
				}
				
			}
			public override bool think(edict_t self)
			{
				//			flyer.nextmove = ACTION_attack1;
				//	 self.monsterinfo.currentmove = flyer_move_stop;
				self.monsterinfo.currentmove = Suake2.UI.game.monsters.M_Flyer.flyer_move_start_melee;
				return true;
			}
		}
		public class AnonymousClassEntPainAdapter:EntPainAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_pain";
				}
				
			}
			public override void  pain(edict_t self, edict_t other, float kick, int damage)
			{
				int n;
				
				if (self.health < (self.max_health / 2))
					self.s.skinnum = 1;
				
				if (GameBase.level.time < self.pain_debounce_time)
					return ;
				
				self.pain_debounce_time = GameBase.level.time + 3;
				if (GameBase.skill.value_Renamed == 3)
					return ; // no pain anims in nightmare
				
				n = Lib.rand() % 3;
				if (n == 0)
				{
					GameBase.gi.sound(self, Defines.CHAN_VOICE, jake2.game.monsters.M_Flyer.sound_pain1, 1, Defines.ATTN_NORM, 0);
					self.monsterinfo.currentmove = Suake2.UI.game.monsters.M_Flyer.flyer_move_pain1;
				}
				else if (n == 1)
				{
					GameBase.gi.sound(self, Defines.CHAN_VOICE, jake2.game.monsters.M_Flyer.sound_pain2, 1, Defines.ATTN_NORM, 0);
					self.monsterinfo.currentmove = Suake2.UI.game.monsters.M_Flyer.flyer_move_pain2;
				}
				else
				{
					GameBase.gi.sound(self, Defines.CHAN_VOICE, jake2.game.monsters.M_Flyer.sound_pain1, 1, Defines.ATTN_NORM, 0);
					self.monsterinfo.currentmove = Suake2.UI.game.monsters.M_Flyer.flyer_move_pain3;
				}
			}
		}
		public class AnonymousClassEntDieAdapter:EntDieAdapter
		{
			override public System.String ID
			{
				get
				{
					return "flyer_die";
				}
				
			}
			public override void  die(edict_t self, edict_t inflictor, edict_t attacker, int damage, float[] point)
			{
				GameBase.gi.sound(self, Defines.CHAN_VOICE, jake2.game.monsters.M_Flyer.sound_die, 1, Defines.ATTN_NORM, 0);
				GameMisc.BecomeExplosion1(self);
			}
		}
		private void  InitBlock()
		{
			flyer_frames_stand = new mframe_t[]{new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null), new mframe_t(GameAI.ai_stand, 0, null)};
			flyer_frames_walk = new mframe_t[]{new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.
				ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null), new mframe_t(GameAI.ai_walk_Renamed_Field, 5, null)};
			flyer_frames_run = new mframe_t[]{new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null), new mframe_t(GameAI.ai_run, 10, null)};
			flyer_frames_start = new mframe_t[]{new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, flyer_nextmove)};
			flyer_frames_stop = new mframe_t[]{new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, flyer_nextmove)};
			flyer_frames_rollright = new mframe_t[]{new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null)};
			flyer_frames_rollleft = new mframe_t[]{new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null)};
			flyer_frames_pain3 = new mframe_t[]{new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null)};
			flyer_frames_pain2 = new mframe_t[]{new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null)};
			flyer_frames_pain1 = new mframe_t[]{new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null)};
			flyer_frames_defense = new mframe_t[]{new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null)};
			flyer_frames_bankright = new mframe_t[]{new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null)};
			flyer_frames_bankleft = new mframe_t[]{new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null), new mframe_t(GameAI.ai_move_Renamed_Field, 0, null)};
			flyer_frames_attack2 = new mframe_t[]{new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, - 10, flyer_fireleft), new mframe_t(GameAI.ai_charge, - 10, flyer_fireright), new mframe_t(GameAI.ai_charge, - 10, flyer_fireleft), new mframe_t(GameAI.ai_charge, - 10, flyer_fireright), new mframe_t(GameAI.ai_charge, - 10, flyer_fireleft), new mframe_t(GameAI.ai_charge, - 10, flyer_fireright), new mframe_t(GameAI.ai_charge, - 10, flyer_fireleft), new mframe_t(GameAI.ai_charge, - 10, flyer_fireright), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null)};
			flyer_frames_start_melee = new mframe_t[]{new mframe_t(GameAI.ai_charge, 0, flyer_pop_blades), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null)};
			flyer_frames_end_melee = new mframe_t[]{new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null)};
			flyer_frames_loop_melee = new mframe_t[]{new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, flyer_slash_left), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, flyer_slash_right), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null), new mframe_t(GameAI.ai_charge, 0, null)};
		}
		//	This file generated by ModelGen - Do NOT Modify
		
		public const int ACTION_nothing = 0;
		
		public const int ACTION_attack1 = 1;
		
		public const int ACTION_attack2 = 2;
		
		public const int ACTION_run = 3;
		
		public const int ACTION_walk = 4;
		
		public const int FRAME_start01 = 0;
		
		public const int FRAME_start02 = 1;
		
		public const int FRAME_start03 = 2;
		
		public const int FRAME_start04 = 3;
		
		public const int FRAME_start05 = 4;
		
		public const int FRAME_start06 = 5;
		
		public const int FRAME_stop01 = 6;
		
		public const int FRAME_stop02 = 7;
		
		public const int FRAME_stop03 = 8;
		
		public const int FRAME_stop04 = 9;
		
		public const int FRAME_stop05 = 10;
		
		public const int FRAME_stop06 = 11;
		
		public const int FRAME_stop07 = 12;
		
		public const int FRAME_stand01 = 13;
		
		public const int FRAME_stand02 = 14;
		
		public const int FRAME_stand03 = 15;
		
		public const int FRAME_stand04 = 16;
		
		public const int FRAME_stand05 = 17;
		
		public const int FRAME_stand06 = 18;
		
		public const int FRAME_stand07 = 19;
		
		public const int FRAME_stand08 = 20;
		
		public const int FRAME_stand09 = 21;
		
		public const int FRAME_stand10 = 22;
		
		public const int FRAME_stand11 = 23;
		
		public const int FRAME_stand12 = 24;
		
		public const int FRAME_stand13 = 25;
		
		public const int FRAME_stand14 = 26;
		
		public const int FRAME_stand15 = 27;
		
		public const int FRAME_stand16 = 28;
		
		public const int FRAME_stand17 = 29;
		
		public const int FRAME_stand18 = 30;
		
		public const int FRAME_stand19 = 31;
		
		public const int FRAME_stand20 = 32;
		
		public const int FRAME_stand21 = 33;
		
		public const int FRAME_stand22 = 34;
		
		public const int FRAME_stand23 = 35;
		
		public const int FRAME_stand24 = 36;
		
		public const int FRAME_stand25 = 37;
		
		public const int FRAME_stand26 = 38;
		
		public const int FRAME_stand27 = 39;
		
		public const int FRAME_stand28 = 40;
		
		public const int FRAME_stand29 = 41;
		
		public const int FRAME_stand30 = 42;
		
		public const int FRAME_stand31 = 43;
		
		public const int FRAME_stand32 = 44;
		
		public const int FRAME_stand33 = 45;
		
		public const int FRAME_stand34 = 46;
		
		public const int FRAME_stand35 = 47;
		
		public const int FRAME_stand36 = 48;
		
		public const int FRAME_stand37 = 49;
		
		public const int FRAME_stand38 = 50;
		
		public const int FRAME_stand39 = 51;
		
		public const int FRAME_stand40 = 52;
		
		public const int FRAME_stand41 = 53;
		
		public const int FRAME_stand42 = 54;
		
		public const int FRAME_stand43 = 55;
		
		public const int FRAME_stand44 = 56;
		
		public const int FRAME_stand45 = 57;
		
		public const int FRAME_attak101 = 58;
		
		public const int FRAME_attak102 = 59;
		
		public const int FRAME_attak103 = 60;
		
		public const int FRAME_attak104 = 61;
		
		public const int FRAME_attak105 = 62;
		
		public const int FRAME_attak106 = 63;
		
		public const int FRAME_attak107 = 64;
		
		public const int FRAME_attak108 = 65;
		
		public const int FRAME_attak109 = 66;
		
		public const int FRAME_attak110 = 67;
		
		public const int FRAME_attak111 = 68;
		
		public const int FRAME_attak112 = 69;
		
		public const int FRAME_attak113 = 70;
		
		public const int FRAME_attak114 = 71;
		
		public const int FRAME_attak115 = 72;
		
		public const int FRAME_attak116 = 73;
		
		public const int FRAME_attak117 = 74;
		
		public const int FRAME_attak118 = 75;
		
		public const int FRAME_attak119 = 76;
		
		public const int FRAME_attak120 = 77;
		
		public const int FRAME_attak121 = 78;
		
		public const int FRAME_attak201 = 79;
		
		public const int FRAME_attak202 = 80;
		
		public const int FRAME_attak203 = 81;
		
		public const int FRAME_attak204 = 82;
		
		public const int FRAME_attak205 = 83;
		
		public const int FRAME_attak206 = 84;
		
		public const int FRAME_attak207 = 85;
		
		public const int FRAME_attak208 = 86;
		
		public const int FRAME_attak209 = 87;
		
		public const int FRAME_attak210 = 88;
		
		public const int FRAME_attak211 = 89;
		
		public const int FRAME_attak212 = 90;
		
		public const int FRAME_attak213 = 91;
		
		public const int FRAME_attak214 = 92;
		
		public const int FRAME_attak215 = 93;
		
		public const int FRAME_attak216 = 94;
		
		public const int FRAME_attak217 = 95;
		
		public const int FRAME_bankl01 = 96;
		
		public const int FRAME_bankl02 = 97;
		
		public const int FRAME_bankl03 = 98;
		
		public const int FRAME_bankl04 = 99;
		
		public const int FRAME_bankl05 = 100;
		
		public const int FRAME_bankl06 = 101;
		
		public const int FRAME_bankl07 = 102;
		
		public const int FRAME_bankr01 = 103;
		
		public const int FRAME_bankr02 = 104;
		
		public const int FRAME_bankr03 = 105;
		
		public const int FRAME_bankr04 = 106;
		
		public const int FRAME_bankr05 = 107;
		
		public const int FRAME_bankr06 = 108;
		
		public const int FRAME_bankr07 = 109;
		
		public const int FRAME_rollf01 = 110;
		
		public const int FRAME_rollf02 = 111;
		
		public const int FRAME_rollf03 = 112;
		
		public const int FRAME_rollf04 = 113;
		
		public const int FRAME_rollf05 = 114;
		
		public const int FRAME_rollf06 = 115;
		
		public const int FRAME_rollf07 = 116;
		
		public const int FRAME_rollf08 = 117;
		
		public const int FRAME_rollf09 = 118;
		
		public const int FRAME_rollr01 = 119;
		
		public const int FRAME_rollr02 = 120;
		
		public const int FRAME_rollr03 = 121;
		
		public const int FRAME_rollr04 = 122;
		
		public const int FRAME_rollr05 = 123;
		
		public const int FRAME_rollr06 = 124;
		
		public const int FRAME_rollr07 = 125;
		
		public const int FRAME_rollr08 = 126;
		
		public const int FRAME_rollr09 = 127;
		
		public const int FRAME_defens01 = 128;
		
		public const int FRAME_defens02 = 129;
		
		public const int FRAME_defens03 = 130;
		
		public const int FRAME_defens04 = 131;
		
		public const int FRAME_defens05 = 132;
		
		public const int FRAME_defens06 = 133;
		
		public const int FRAME_pain101 = 134;
		
		public const int FRAME_pain102 = 135;
		
		public const int FRAME_pain103 = 136;
		
		public const int FRAME_pain104 = 137;
		
		public const int FRAME_pain105 = 138;
		
		public const int FRAME_pain106 = 139;
		
		public const int FRAME_pain107 = 140;
		
		public const int FRAME_pain108 = 141;
		
		public const int FRAME_pain109 = 142;
		
		public const int FRAME_pain201 = 143;
		
		public const int FRAME_pain202 = 144;
		
		public const int FRAME_pain203 = 145;
		
		public const int FRAME_pain204 = 146;
		
		public const int FRAME_pain301 = 147;
		
		public const int FRAME_pain302 = 148;
		
		public const int FRAME_pain303 = 149;
		
		public const int FRAME_pain304 = 150;
		
		public const float MODEL_SCALE = 1.000000f;
		
		internal static int nextmove; // Used for start/stop frames
		
		internal static int sound_sight;
		
		internal static int sound_idle;
		
		internal static int sound_pain1;
		
		internal static int sound_pain2;
		
		internal static int sound_slash;
		
		internal static int sound_sproing;
		
		internal static int sound_die;
		
		//UPGRADE_NOTE: The initialization of  'flyer_sight' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		public static EntInteractAdapter flyer_sight;
		
		//UPGRADE_NOTE: The initialization of  'flyer_idle' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static EntThinkAdapter flyer_idle;
		
		//UPGRADE_NOTE: The initialization of  'flyer_pop_blades' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static EntThinkAdapter flyer_pop_blades;
		
		//UPGRADE_NOTE: The initialization of  'flyer_frames_stand' was moved to method 'InitBlock'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static mframe_t[] flyer_frames_stand;
		
		internal static mmove_t flyer_move_stand = new mmove_t(FRAME_stand01, FRAME_stand45, flyer_frames_stand, null);
		
		//UPGRADE_NOTE: The initialization of  'flyer_frames_walk' was moved to method 'InitBlock'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static mframe_t[] flyer_frames_walk;
		
		internal static mmove_t flyer_move_walk = new mmove_t(FRAME_stand01, FRAME_stand45, flyer_frames_walk, null);
		
		//UPGRADE_NOTE: The initialization of  'flyer_frames_run' was moved to method 'InitBlock'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static mframe_t[] flyer_frames_run;
		
		internal static mmove_t flyer_move_run = new mmove_t(FRAME_stand01, FRAME_stand45, flyer_frames_run, null);
		
		//UPGRADE_NOTE: The initialization of  'flyer_run' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static EntThinkAdapter flyer_run;
		
		//UPGRADE_NOTE: The initialization of  'flyer_walk' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static EntThinkAdapter flyer_walk;
		
		//UPGRADE_NOTE: The initialization of  'flyer_stand' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static EntThinkAdapter flyer_stand;
		
		//UPGRADE_NOTE: The initialization of  'flyer_nextmove' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static EntThinkAdapter flyer_nextmove;
		
		//UPGRADE_NOTE: The initialization of  'flyer_frames_start' was moved to method 'InitBlock'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static mframe_t[] flyer_frames_start;
		
		internal static mmove_t flyer_move_start = new mmove_t(FRAME_start01, FRAME_start06, flyer_frames_start, null);
		
		//UPGRADE_NOTE: The initialization of  'flyer_frames_stop' was moved to method 'InitBlock'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static mframe_t[] flyer_frames_stop;
		
		internal static mmove_t flyer_move_stop = new mmove_t(FRAME_stop01, FRAME_stop07, flyer_frames_stop, null);
		
		//UPGRADE_NOTE: The initialization of  'flyer_stop' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static EntThinkAdapter flyer_stop;
		
		//UPGRADE_NOTE: The initialization of  'flyer_start' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static EntThinkAdapter flyer_start;
		
		//UPGRADE_NOTE: The initialization of  'flyer_frames_rollright' was moved to method 'InitBlock'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static mframe_t[] flyer_frames_rollright;
		
		internal static mmove_t flyer_move_rollright = new mmove_t(FRAME_rollr01, FRAME_rollr09, flyer_frames_rollright, null);
		
		//UPGRADE_NOTE: The initialization of  'flyer_frames_rollleft' was moved to method 'InitBlock'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static mframe_t[] flyer_frames_rollleft;
		
		internal static mmove_t flyer_move_rollleft = new mmove_t(FRAME_rollf01, FRAME_rollf09, flyer_frames_rollleft, null);
		
		//UPGRADE_NOTE: The initialization of  'flyer_frames_pain3' was moved to method 'InitBlock'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static mframe_t[] flyer_frames_pain3;
		
		internal static mmove_t flyer_move_pain3 = new mmove_t(FRAME_pain301, FRAME_pain304, flyer_frames_pain3, flyer_run);
		
		//UPGRADE_NOTE: The initialization of  'flyer_frames_pain2' was moved to method 'InitBlock'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static mframe_t[] flyer_frames_pain2;
		
		internal static mmove_t flyer_move_pain2 = new mmove_t(FRAME_pain201, FRAME_pain204, flyer_frames_pain2, flyer_run);
		
		//UPGRADE_NOTE: The initialization of  'flyer_frames_pain1' was moved to method 'InitBlock'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static mframe_t[] flyer_frames_pain1;
		
		internal static mmove_t flyer_move_pain1 = new mmove_t(FRAME_pain101, FRAME_pain109, flyer_frames_pain1, flyer_run);
		
		//UPGRADE_NOTE: The initialization of  'flyer_frames_defense' was moved to method 'InitBlock'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static mframe_t[] flyer_frames_defense;
		
		internal static mmove_t flyer_move_defense = new mmove_t(FRAME_defens01, FRAME_defens06, flyer_frames_defense, null);
		
		//UPGRADE_NOTE: The initialization of  'flyer_frames_bankright' was moved to method 'InitBlock'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static mframe_t[] flyer_frames_bankright;
		
		internal static mmove_t flyer_move_bankright = new mmove_t(FRAME_bankr01, FRAME_bankr07, flyer_frames_bankright, null);
		
		//UPGRADE_NOTE: The initialization of  'flyer_frames_bankleft' was moved to method 'InitBlock'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static mframe_t[] flyer_frames_bankleft;
		
		internal static mmove_t flyer_move_bankleft = new mmove_t(FRAME_bankl01, FRAME_bankl07, flyer_frames_bankleft, null);
		
		//UPGRADE_NOTE: The initialization of  'flyer_fireleft' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static EntThinkAdapter flyer_fireleft;
		
		//UPGRADE_NOTE: The initialization of  'flyer_fireright' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static EntThinkAdapter flyer_fireright;
		
		//UPGRADE_NOTE: The initialization of  'flyer_frames_attack2' was moved to method 'InitBlock'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static mframe_t[] flyer_frames_attack2;
		
		internal static mmove_t flyer_move_attack2 = new mmove_t(FRAME_attak201, FRAME_attak217, flyer_frames_attack2, flyer_run);
		
		//UPGRADE_NOTE: The initialization of  'flyer_slash_left' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static EntThinkAdapter flyer_slash_left;
		
		//UPGRADE_NOTE: The initialization of  'flyer_slash_right' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static EntThinkAdapter flyer_slash_right;
		
		//UPGRADE_NOTE: The initialization of  'flyer_loop_melee' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static EntThinkAdapter flyer_loop_melee;
		
		//UPGRADE_NOTE: The initialization of  'flyer_frames_start_melee' was moved to method 'InitBlock'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static mframe_t[] flyer_frames_start_melee;
		
		internal static mmove_t flyer_move_start_melee = new mmove_t(FRAME_attak101, FRAME_attak106, flyer_frames_start_melee, flyer_loop_melee);
		
		//UPGRADE_NOTE: The initialization of  'flyer_frames_end_melee' was moved to method 'InitBlock'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static mframe_t[] flyer_frames_end_melee;
		
		internal static mmove_t flyer_move_end_melee = new mmove_t(FRAME_attak119, FRAME_attak121, flyer_frames_end_melee, flyer_run);
		
		//UPGRADE_NOTE: The initialization of  'flyer_frames_loop_melee' was moved to method 'InitBlock'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static mframe_t[] flyer_frames_loop_melee;
		
		//UPGRADE_NOTE: The initialization of  'flyer_check_melee' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static EntThinkAdapter flyer_check_melee;
		
		internal static mmove_t flyer_move_loop_melee = new mmove_t(FRAME_attak107, FRAME_attak118, flyer_frames_loop_melee, flyer_check_melee);
		
		//UPGRADE_NOTE: The initialization of  'flyer_attack' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static EntThinkAdapter flyer_attack;
		
		//UPGRADE_NOTE: The initialization of  'flyer_setstart' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static EntThinkAdapter flyer_setstart;
		
		//UPGRADE_NOTE: The initialization of  'flyer_melee' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static EntThinkAdapter flyer_melee;
		
		//UPGRADE_NOTE: The initialization of  'flyer_pain' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static EntPainAdapter flyer_pain;
		
		//UPGRADE_NOTE: The initialization of  'flyer_die' was moved to static method 'jake2.game.monsters.M_Flyer'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1005'"
		internal static EntDieAdapter flyer_die;
		
		internal static void  flyer_fire(edict_t self, int flash_number)
		{
			float[] start = new float[]{0, 0, 0};
			
			float[] forward = new float[]{0, 0, 0}, right = new float[]{0, 0, 0};
			float[] end = new float[]{0, 0, 0};
			float[] dir = new float[]{0, 0, 0};
			int effect;
			
			if ((self.s.frame == FRAME_attak204) || (self.s.frame == FRAME_attak207) || (self.s.frame == FRAME_attak210))
				effect = Defines.EF_HYPERBLASTER;
			else
				effect = 0;
			Math3D.AngleVectors(self.s.angles, forward, right, null);
			Math3D.G_ProjectSource(self.s.origin, M_Flash.monster_flash_offset[flash_number], forward, right, start);
			
			Math3D.VectorCopy(self.enemy.s.origin, end);
			end[2] += self.enemy.viewheight;
			Math3D.VectorSubtract(end, start, dir);
			
			Monster.monster_fire_blaster(self, start, dir, 1, 1000, flash_number, effect);
		}
		
		/*
		* QUAKED monster_flyer (1 .5 0) (-16 -16 -24) (16 16 32) Ambush
		* Trigger_Spawn Sight
		*/
		public static void  SP_monster_flyer(edict_t self)
		{
			if (GameBase.deathmatch.value_Renamed != 0)
			{
				GameUtil.G_FreeEdict(self);
				return ;
			}
			
			// fix a map bug in jail5.bsp
			if (GameBase.level.mapname.ToUpper().Equals("jail5".ToUpper()) && (self.s.origin[2] == - 104))
			{
				self.targetname = self.target;
				self.target = null;
			}
			
			sound_sight = GameBase.gi.soundindex("flyer/flysght1.wav");
			sound_idle = GameBase.gi.soundindex("flyer/flysrch1.wav");
			sound_pain1 = GameBase.gi.soundindex("flyer/flypain1.wav");
			sound_pain2 = GameBase.gi.soundindex("flyer/flypain2.wav");
			sound_slash = GameBase.gi.soundindex("flyer/flyatck2.wav");
			sound_sproing = GameBase.gi.soundindex("flyer/flyatck1.wav");
			sound_die = GameBase.gi.soundindex("flyer/flydeth1.wav");
			
			GameBase.gi.soundindex("flyer/flyatck3.wav");
			
			self.s.modelindex = GameBase.gi.modelindex("models/monsters/flyer/tris.md2");
			Math3D.VectorSet(self.mins, - 16, - 16, - 24);
			Math3D.VectorSet(self.maxs, 16, 16, 32);
			self.movetype = Defines.MOVETYPE_STEP;
			self.solid = Defines.SOLID_BBOX;
			
			self.s.sound = GameBase.gi.soundindex("flyer/flyidle1.wav");
			
			self.health = 50;
			self.mass = 50;
			
			self.pain = flyer_pain;
			self.die = flyer_die;
			
			self.monsterinfo.stand = flyer_stand;
			self.monsterinfo.walk = flyer_walk;
			self.monsterinfo.run = flyer_run;
			self.monsterinfo.attack = flyer_attack;
			self.monsterinfo.melee = flyer_melee;
			self.monsterinfo.sight = flyer_sight;
			self.monsterinfo.idle = flyer_idle;
			
			GameBase.gi.linkentity(self);
			
			self.monsterinfo.currentmove = flyer_move_stand;
			self.monsterinfo.scale = MODEL_SCALE;
			
			GameAI.flymonster_start.think(self);
		}
		static M_Flyer()
		{
			flyer_sight = new AnonymousClassEntInteractAdapter();
			flyer_idle = new AnonymousClassEntThinkAdapter();
			flyer_pop_blades = new AnonymousClassEntThinkAdapter1();
			flyer_run = new AnonymousClassEntThinkAdapter2();
			flyer_walk = new AnonymousClassEntThinkAdapter3();
			flyer_stand = new AnonymousClassEntThinkAdapter4();
			flyer_nextmove = new AnonymousClassEntThinkAdapter5();
			flyer_stop = new AnonymousClassEntThinkAdapter6();
			flyer_start = new AnonymousClassEntThinkAdapter7();
			flyer_fireleft = new AnonymousClassEntThinkAdapter8();
			flyer_fireright = new AnonymousClassEntThinkAdapter9();
			flyer_slash_left = new AnonymousClassEntThinkAdapter10();
			flyer_slash_right = new AnonymousClassEntThinkAdapter11();
			flyer_loop_melee = new AnonymousClassEntThinkAdapter12();
			flyer_check_melee = new AnonymousClassEntThinkAdapter13();
			flyer_attack = new AnonymousClassEntThinkAdapter14();
			flyer_setstart = new AnonymousClassEntThinkAdapter15();
			flyer_melee = new AnonymousClassEntThinkAdapter16();
			flyer_pain = new AnonymousClassEntPainAdapter();
			flyer_die = new AnonymousClassEntDieAdapter();
		}
	}
}